BM25 어휘 검색
RAG 파이프라인을 구축하다 보면, 의미 검색만으로는 항상 최선의 결과를 얻지 못한다는 것을 곧 깨닫게 됩니다. 때로는 의미 검색이 놓칠 수 있는 정확한 용어 일치가 필요합니다. 이에 대한 해결책은 BM25라는 기법을 사용하여 의미 검색과 어휘 검색을 결합하는 것입니다.
의미 검색만 사용할 때의 문제점
예를 들어 문서에서 "INC-2023-Q4-011"과 같은 특정 사건 ID를 검색한다고 가정해 보겠습니다. 의미 검색은 문맥과 의미를 이해하는 데 탁월하지만, 의미적으로는 관련이 있어도 실제로 찾고 있는 정확한 용어를 포함하지 않는 섹션을 반환할 수 있습니다.
위의 예시에서, 의미 검색은 사건 ID가 실제로 포함된 사이버보안 섹션을 반환했지만, 사건 ID를 전혀 언급하지 않는 재무 분석 섹션도 함께 반환했습니다. 이는 의미 검색이 정확한 용어 일치보다 개념적 유사성에 집중하기 때문입니다.
하이브리드 검색 전략
해결책은 의미 검색과 어휘 검색을 병렬로 실행한 다음 결과를 병합하는 것입니다. 이를 통해 두 가지 방식의 장점을 모두 활용할 수 있습니다:
- 의미 검색은 임베딩을 사용하여 개념적으로 관련된 콘텐츠를 찾습니다
- 어휘 검색은 고전적인 텍스트 검색을 사용하여 정확한 용어 일치를 찾습니다
- 병합된 결과는 두 가지 방식을 결합하여 더 높은 정확도를 제공합니다
BM25의 작동 방식
BM25(Best Match 25)는 RAG 시스템에서 어휘 검색에 널리 사용되는 알고리즘입니다. 검색 쿼리를 처리하는 방식은 다음과 같습니다:
1단계: 쿼리 토큰화
사용자의 질문을 개별 용어로 분리합니다. 예를 들어, "a INC-2023-Q4-011"은 ["a", "INC-2023-Q4-011"]이 됩니다.
2단계: 용어 빈도 계산
각 용어가 모든 문서에서 얼마나 자주 나타나는지 확인합니다. "a"와 같은 일반적인 단어는 5번 나타날 수 있지만, "INC-2023-Q4-011"과 같은 특정 용어는 한 번만 나타날 수 있습니다.
3단계: 중요도에 따른 용어 가중치 부여
출현 빈도가 낮은 용어일수록 더 높은 중요도 점수를 받습니다. "a"라는 단어는 흔하기 때문에 낮은 중요도를 받고, "INC-2023-Q4-011"은 희귀하기 때문에 높은 중요도를 받습니다.
4단계: 최적 일치 항목 찾기
가중치가 높은 용어의 출현 빈도가 더 많은 문서를 반환합니다.
BM25 검색 구현
기본적인 BM25 검색 시스템을 설정하는 방법은 다음과 같습니다:
# 1. Chunk your text by sections
chunks = chunk_by_section(text)
# 2. Create a BM25 store and add documents
store = BM25Index()
for chunk in chunks:
store.add_document({"content": chunk})
# 3. Search the store
results = store.search("What happened with INC-2023-Q4-011?", 3)
# Print results
for doc, distance in results:
print(distance, "\n", doc["content"][:200], "\n----\n")
이 검색을 실행하면 의미 검색만 사용할 때보다 훨씬 더 나은 결과를 얻을 수 있습니다. BM25 알고리즘은 실제로 특정 검색어, 특히 사건 ID와 같은 희귀 용어를 포함하는 섹션을 우선시합니다.
결과가 이제 소프트웨어 엔지니어링 섹션과 사이버보안 섹션을 적절히 우선시하는 것을 확인할 수 있습니다. 두 섹션 모두 실제로 찾고 있는 사건 ID를 포함하고 있습니다.
이 방법이 더 효과적인 이유
BM25가 정확한 일치 항목을 찾는 데 탁월한 이유는 다음과 같습니다:
- 희귀하고 특정한 용어에 더 높은 가중치를 부여합니다
- 검색 가치를 더하지 않는 일반적인 단어를 무시합니다
- 의미적 의미보다 용어 빈도에 집중합니다
- 기술 용어, ID, 특정 구문에 특히 효과적입니다
핵심은 두 검색 방식이 상호 보완적인 강점을 가지고 있다는 것입니다. 의미 검색은 문맥과 의미를 이해하고, 어휘 검색은 정확한 용어 일치를 놓치지 않도록 합니다. 두 방식을 결합하면 개념적 쿼리와 특정 검색 모두를 효과적으로 처리하는 더욱 강력한 검색 시스템을 만들 수 있습니다.
다음 단계에서는 두 검색 시스템의 결과를 병합하여 통합된 하이브리드 검색 경험을 만드는 방법을 배우게 됩니다.
